package c09泛型;

import java.util.*;

public class 泛型方法 {
	//声明一个泛型方法，该泛型方法中带一个T类型形参，所有的类型形参都放在修饰符和返回值之间，
	//与类、接口不同，定义方法时才需要声明泛型类型，使用方法时则不用！
	static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
		for (T o : a) {
			c.add(o);
		}
	}

	public static <T> void m(T t) {
		List<T> l = new ArrayList<>();
		l.add(t);
	}

	public static void main(String[] args) {
		Object[] oa = new Object[100];
		Collection<Object> co = new ArrayList<>();
		//下面代码中T代表Object类型
		fromArrayToCollection(oa, co);

		String[] sa = new String[100];
		Collection<String> cs = new ArrayList<>();
		//下面代码中T代表String类型
		fromArrayToCollection(sa, cs);
		//@@下面代码中T代表Object类型
		fromArrayToCollection(sa, co);
//		fromArrayToCollection(oa,cs);//编译错误！

		Integer[] ia = new Integer[100];
		Float[] fa = new Float[100];
		Number[] na = new Number[100];
		Collection<Number> cn = new ArrayList<>();
		//下面代码中T代表Number类型
		fromArrayToCollection(ia, cn);
		//下面代码中T代表Number类型
		fromArrayToCollection(fa, cn);
		//下面代码中T代表Number类型
		fromArrayToCollection(na, cn);
		//下面代码中T代表Object类型
		fromArrayToCollection(na, co);
		//下面代码中T代表String类型，但na是一个Number数组，
		//因为Number既不是String类型，
		//也不是它的子类，所以出现编译错误
		//fromArrayToCollection(na, cs);

		m("xxx");
	}
}
